// 超级管理员服务 - 使用 service_role 绕过 RLS
import { createClient } from '@supabase/supabase-js';

// 超级管理员专用客户端 - 使用 service_role 密钥
const supabaseAdmin = createClient(
  import.meta.env.VITE_SUPABASE_URL!,
  import.meta.env.VITE_SUPABASE_SERVICE_ROLE_KEY!, // 需要添加这个环境变量
  {
    auth: {
      autoRefreshToken: false,
      persistSession: false
    }
  }
);

export interface UserProfile {
  id: string;
  email: string;
  name: string;
  role: string;
  avatar_url?: string;
  created_at: string;
  updated_at: string;
}

export interface CreateUserData {
  email: string;
  password: string;
  name: string;
  role: string;
}

export interface UpdateUserData {
  name: string;
  role: string;
}

class AdminService {
  // 检查是否为超级管理员
  async isSuperAdmin(userId: string): Promise<boolean> {
    try {
      const { data, error } = await supabaseAdmin
        .from('user_profiles')
        .select('role')
        .eq('id', userId)
        .single();

      if (error) return false;
      return data?.role === 'superadmin';
    } catch {
      return false;
    }
  }

  // 获取所有用户（仅超级管理员）
  async getAllUsers(): Promise<UserProfile[]> {
    const { data, error } = await supabaseAdmin
      .from('user_profiles')
      .select('*')
      .order('created_at', { ascending: false });

    if (error) throw error;
    return data || [];
  }

  // 创建用户（仅超级管理员）
  async createUser(userData: CreateUserData): Promise<{ success: boolean; message: string; user?: any }> {
    try {
      // 1. 通过 Admin API 创建 Auth 用户
      const { data: authData, error: authError } = await supabaseAdmin.auth.admin.createUser({
        email: userData.email,
        password: userData.password,
        email_confirm: true // 自动确认邮箱
      });

      if (authError) throw authError;

      if (authData.user) {
        // 2. 创建用户配置文件
        const { error: profileError } = await supabaseAdmin
          .from('user_profiles')
          .insert({
            id: authData.user.id,
            email: userData.email,
            name: userData.name,
            role: userData.role,
          });

        if (profileError) throw profileError;

        return {
          success: true,
          message: '用户创建成功',
          user: authData.user
        };
      }

      throw new Error('创建用户失败');
    } catch (error: any) {
      return {
        success: false,
        message: error.message || '创建用户失败'
      };
    }
  }

  // 更新用户（仅超级管理员）
  async updateUser(userId: string, userData: UpdateUserData): Promise<{ success: boolean; message: string }> {
    try {
      const { error } = await supabaseAdmin
        .from('user_profiles')
        .update({
          name: userData.name,
          role: userData.role,
          updated_at: new Date().toISOString(),
        })
        .eq('id', userId);

      if (error) throw error;

      return {
        success: true,
        message: '用户信息更新成功'
      };
    } catch (error: any) {
      return {
        success: false,
        message: error.message || '更新用户失败'
      };
    }
  }

  // 删除用户（仅超级管理员）
  async deleteUser(userId: string): Promise<{ success: boolean; message: string }> {
    try {
      // 1. 删除用户配置文件
      const { error: profileError } = await supabaseAdmin
        .from('user_profiles')
        .delete()
        .eq('id', userId);

      if (profileError) throw profileError;

      // 2. 删除 Auth 用户
      const { error: authError } = await supabaseAdmin.auth.admin.deleteUser(userId);
      
      if (authError) throw authError;

      return {
        success: true,
        message: '用户删除成功'
      };
    } catch (error: any) {
      return {
        success: false,
        message: error.message || '删除用户失败'
      };
    }
  }

  // 获取所有基金投资计划（仅超级管理员）
  async getAllFundPlans() {
    const { data, error } = await supabaseAdmin
      .from('fund_investment_plans')
      .select('*')
      .order('created_at', { ascending: false });

    if (error) throw error;
    return data || [];
  }

  // 获取所有证券投资计划（仅超级管理员）
  async getAllStockPlans() {
    const { data, error } = await supabaseAdmin
      .from('stock_investment_plans')
      .select('*')
      .order('created_at', { ascending: false });

    if (error) throw error;
    return data || [];
  }

  // 获取所有收益计算记录（仅超级管理员）
  async getAllCalculations() {
    const { data, error } = await supabaseAdmin
      .from('profit_calculations')
      .select('*')
      .order('created_at', { ascending: false });

    if (error) throw error;
    return data || [];
  }
}

export const adminService = new AdminService();